﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Core.Message.Entities;
using Core.Controls.Message;
using Core.ExceptionHandling;
using Core.Common.Session;
using vHCS.TS.Business;
using vHCS.HR.Business;
using vHCS.HR.Entities;
using vHCS.SYS.Business;
using vHCS.LS.Business;
using Telerik.Web.UI;
using System.Configuration;
namespace vHCS.K2App.MdlK2
{
    public partial class TS_LeaveApprove : Core.NTier.UserInterface.BaseFormNotPer
    {
        /// <summary>
        /// Khai báo biến
        /// </summary>
        private const string _LIST_PAGE = "TS_LeaveListByUser.aspx";
        private const string _MY_PAGE = "TS_LeaveRequestByUser.aspx";
        private const string _APPLICATIONID = "ApplicationLeaveID";
        private const string _LEAVERECORDID = "LeaveRecordID";
        private const string _EMPID = "EmpID";
        private const long _APPROVED = 4; // đã duyệt

        /// <summary>
        /// page load
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                dtpCurrentDate.SelectedDate = DateTime.Now.Date;
                hStatusEdit.Value = "0";
                chkDetail.Checked = false; // mặc định = false

                if (!Page.IsPostBack)
                {
                    long lngLeaveRecordID = 0;
                    try
                    {
                        hdfSN.Value = Request.QueryString["SN"].ToString();
                        //-------------- lấy kết quả request
                        // ID nhân viên
                        string sharedUser = Request.QueryString["SharedUser"] != null ? Request.QueryString["SharedUser"].ToString() : string.Empty;
                        this.hEmpID.Value = K2CoreLib.K2Utils.GetDataField(hdfSN.Value, "EmpID", sharedUser);
                        if (hEmpID.Value != "0")
                            ucEmpHeader.LoadEmpInfoByEmpId(Convert.ToInt64(hEmpID.Value));

                        // ID đơn nghỉ
                        this.hApplicationLeaveID.Value = K2CoreLib.K2Utils.GetDataField(hdfSN.Value, "ApplicationLeaveID", sharedUser);
                        // ID phiếu nghỉ

                        long.TryParse(K2CoreLib.K2Utils.GetDataField(hdfSN.Value, "LeaveRecordID", sharedUser), out lngLeaveRecordID);
                        this.hLeaveRecordID.Value = lngLeaveRecordID.ToString();
                    }
                    catch (Exception ex)
                    {
                        btnSaveBot.Enabled = false;
                        btnSaveTop.Enabled = false;
                        //BusinessLogicCustomException ex = new BusinessLogicCustomException("12634");
                        throw ex;
                    }

                    hStatusEdit.Value = "1";

                    LoadInfoLeaveRecord(lngLeaveRecordID);   // load chi tiet thong tin phieu nghi   

                }
            }
            catch (Exception ex)
            {
                AlertMessage message = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(message);
            }
        }

        /// <summary>
        /// sự kiện click nút lưu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                TS_LeaveRecordCollection collection = new TS_LeaveRecordCollection();
                //HR_WorkingRecordBL bl_wr = new HR_WorkingRecordBL();
                HR_WorkingRecordCollection cl_wr = new HR_WorkingRecordCollection();
                // id đơn nghỉ
                long AppID = 0;
                long.TryParse(hApplicationLeaveID.Value.ToString(), out AppID);

                #region Xử lý K2
                //K2Collection colK2 = new K2Collection();
                //SYS_MailTemplateCollection cl_mail = new SYS_MailTemplateCollection();
                //string sExceedLeave = K2CoreLib.K2Utils.GetDataField(hdfSN.Value, "ExceedLeave");
                //string sDeptHead = K2CoreLib.K2Utils.GetDataField(hdfSN.Value, "DeptHead");
                //string sHR = K2CoreLib.K2Utils.GetDataField(hdfSN.Value, "HR");
                //string sFromDate = K2CoreLib.K2Utils.GetDataField(hdfSN.Value, "FromDate");
                //string sToDate = K2CoreLib.K2Utils.GetDataField(hdfSN.Value, "ToDate");
                //string sRequester = K2CoreLib.K2Utils.GetDataField(hdfSN.Value, "Requester");
                //string sMailNextApprover_Content = SendMailNextApprove(sRequester, sFromDate, sToDate, sExceedLeave);
                //string CurrentUser=SessionManager.UserDomain;
                //float iExceedLeave = TS_clsCommon.ConvertFromStringToFloat(sExceedLeave.Trim());
                //bool finish = true;
                //string approver = "";
                //string[] sparams = null;

                //Nếu số ngày nghỉ >5 và data field DeptHead ="" thì gán cấp phê duyệt tiếp theo là DeptHead
                //if (iExceedLeave >= 5 && string.IsNullOrEmpty(sDeptHead))
                //{
                //    //Lấy cấp phê duyệt là DeptHead
                //    //finish = false;
                //    bl_wr = cl_wr.SelectLastWRByEmpID(ucEmpHeader.EmployeeId);
                //    if (bl_wr.DTO != null)
                //    {
                //        long Hierarchy = bl_wr.HierarchyId;
                //        HIE_EmpInHierarchyCollection cl_emp = new HIE_EmpInHierarchyCollection();
                //        //long DeptHie = cl_emp.SelectDeptHie(Hierarchy);
                //        //approver = colK2.GetLeaderOfHierarchy(DeptHie);
                //        //sparams = new string[2] { "DeptHead", approver };
                //    }
                //}

                //Nếu số ngày nghỉ >5 và data field DeptHead !="" thì gán cấp phê duyệt tiếp theo là HR
                //if (iExceedLeave >= 10 && !string.IsNullOrEmpty(sDeptHead) && string.IsNullOrEmpty(sHR))
                //{
                //    finish = false;
                //    approver = colK2.GetUserOfHR();
                //    sparams = new string[12] { "HR", approver, "MailHR", cl_mail.ReturnEmail(approver), "MailNextApprover_Content", sMailNextApprover_Content, "", "", "", "", "", "" };
                //}

                #region Xử lý gửi mail khi người phê duyệt approve/reject
                //string sMailApprove_Subject = GetSubJectMailApprove(sRequester, cboStatus.SelectedValue);
                //string EmailApprove = cl_mail.ReturnEmail(CurrentUser);
                //string sMailApprove_Content = "";
                //if (!string.IsNullOrEmpty(approver) && cboStatus.SelectedValue != "Reject")
                //    sMailApprove_Content = SendMailApprove(sRequester, sFromDate, sToDate, txtLeaveTaken.Text.Trim(), cboStatus.SelectedValue, CurrentUser, "The ticket is waiting for " + approver + " to approve.");
                //else
                //    sMailApprove_Content = SendMailApprove(sRequester, sFromDate, sToDate, txtLeaveTaken.Text.Trim(), cboStatus.SelectedValue, CurrentUser, "");

                //Gán url vào email
                //string url = ConfigurationManager.AppSettings.Get("History_LeaveRequest") + "?ApplicationLeaveID=" + hApplicationLeaveID.Value + "&LeaveRecordID=" + hLeaveRecordID.Value + "&EmpID=" + hEmpID.Value;
                //url = HttpUtility.HtmlEncode(url);
                //sMailApprove_Content = sMailApprove_Content.Replace("$url$", url);
                //End

                //if (sparams != null)
                //{
                //    sparams[6] = "MailApprove";
                //    sparams[7] = EmailApprove;
                //    sparams[8] = "MailApprove_Subject";
                //    sparams[9] = sMailApprove_Subject;
                //    sparams[10] = "MailApprove_Content";
                //    sparams[11] = sMailApprove_Content;
                //}
                //else
                //{
                //    sparams = new string[] { "MailApprove", EmailApprove, "MailApprove_Subject", sMailApprove_Subject, "MailApprove_Content", sMailApprove_Content };
                //}

                #endregion
                string[] sparams = {"Signer", SessionManager.UserDomain };
                string sharedUser = Request.QueryString["SharedUser"] != null ? Request.QueryString["SharedUser"].ToString() : string.Empty;
                K2CoreLib.K2Utils.ActionExecute(hdfSN.Value, cboStatus.SelectedValue, sharedUser, sparams);
                btnSaveTop.Enabled = false;
                btnSaveBot.Enabled = false;

                //string eformid = collection.SelectProcessId(AppID);
                
                //Insert History Comment 
                //K2CoreLib.K2Utils.InsertHistoryComment(eformid, SessionManager.UserDomain);

                //string Hisstatus = "Approved";
                
                #endregion

                #region Cập nhật đơn nghỉ
                // id tình trạng
                //long StatusID = 0;

                //if (cboStatus.SelectedValue.Equals("Approve"))//Nếu trình trạng là approve
                //{
                //    StatusID = 4;
                //}

                //if (cboStatus.SelectedValue.Equals("Reject"))
                //{
                //    StatusID = 8;
                //    finish=true;
                //    Hisstatus = "Rejected";
                //}

                //Lưu history
                //cl_wr.InsertHistory(AppID, DateTime.Now, SessionManager.Username, "Approver Step", Hisstatus, "", 4,0);
                //Lưu history cho 
                //collection.InsertHistory(AppID, StatusID);
                //Cập nhật lại trạng thái đơn nghỉ
                //if (finish)
                //{
                //    collection.UpdateStatusApplicationLeave(AppID, StatusID);
                //}
                
                //long[] arr_ID = new long[1];// chỉ duyệt 1 đơn nghỉ

                //arr_ID[0] = AppID;
                //if (arr_ID.Length > 0)
                //{
                    //collection.UpdateProcessByList(arr_ID, StatusID);

                //    // thông báo cập nhật trạng thái đơn nghỉ thành công
                //    MessageBox.ShowByMessCode("10184", MessageType.Successful);

                //    this.dataListUser.CacheClear();
                //    this.dtgListUser.Rebind();
                //}
                #endregion
                MessageBox.ShowByMessCode("10184", MessageType.Successful);
                ClientScript.RegisterStartupScript(Page.GetType(), "ClosePage", "ClosePage();", true);
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }

        /// <summary>
        /// DungN2
        /// Lấy nội dung gửi mail Next Approver
        /// </summary>
        /// <param name="Approver"></param>
        /// <param name="Requester"></param>
        /// <param name="FromDate"></param>
        /// <param name="ToDate"></param>
        /// <param name="TotalDay"></param>
        /// <returns></returns>
        //public string SendMailNextApprove(string Requester,string FromDate,string ToDate,string TotalDay)
        //{
        //    try
        //    {
        //        SYS_MailTemplateCollection cl_mail = new SYS_MailTemplateCollection();
        //        string sMailContent = cl_mail.ReturnMailContent("TS_NextApprover");

        //        sMailContent = sMailContent.Replace("$Creator$",Requester);
        //        sMailContent = sMailContent.Replace("$FromDate$", FromDate);
        //        sMailContent = sMailContent.Replace("$ToDate$", ToDate);
        //        sMailContent = sMailContent.Replace("$TotalDay$", TotalDay);
        //        sMailContent = sMailContent.Replace("$url$", ConfigurationManager.AppSettings.Get("LinkLeaveApprove_Old"));

        //        return sMailContent;
        //    }
        //    catch (Exception ex)
        //    {
        //        AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
        //        MessageBox.Show(mess);
        //    }
        //    return "";
        //}

        /// <summary>
        /// DungN2
        /// Hàm trả vể nội dung mail approve sau khi approver approve/reject
        /// </summary>
        /// <param name="Requester"></param>
        /// <param name="FromDate"></param>
        /// <param name="ToDate"></param>
        /// <param name="TotalDay"></param>
        /// <param name="Status"></param>
        /// <param name="Approver"></param>
        /// <returns></returns>
        //public string SendMailApprove(string Requester, string FromDate, string ToDate, string TotalDay, string Status, string Approver,string DeptHead)
        //{
        //    try
        //    {
        //        SYS_MailTemplateCollection cl_mail = new SYS_MailTemplateCollection();
        //        string sMailContent = cl_mail.ReturnMailContent("TS_Approver");

        //        sMailContent = sMailContent.Replace("$Creator$", Requester);
        //        sMailContent = sMailContent.Replace("$FromDate$", FromDate);
        //        sMailContent = sMailContent.Replace("$ToDate$", ToDate);
        //        sMailContent = sMailContent.Replace("$TotalDay$", TotalDay);
        //        sMailContent = sMailContent.Replace("$Status$", Status);
        //        sMailContent = sMailContent.Replace("$Approver$", Approver);
        //        if(string.IsNullOrEmpty(DeptHead))
        //            sMailContent = sMailContent.Replace("$String$", "");
        //        else
        //            sMailContent = sMailContent.Replace("$String$", DeptHead);

        //        return sMailContent;
        //    }
        //    catch (Exception ex)
        //    {
        //        AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
        //        MessageBox.Show(mess);
        //    }
        //    return "";
        //}

        /// <summary>
        /// Lấy nội dung subject của mail approve
        /// </summary>
        /// <param name="Requester"></param>
        /// <param name="Status"></param>
        /// <returns></returns>
        //public string GetSubJectMailApprove(string Requester, string Status)
        //{
        //    try
        //    {
        //        SYS_MailTemplateCollection cl_mail = new SYS_MailTemplateCollection();
        //        string sMailSubject = cl_mail.ReturnSubjectMail("TS_Approver");

        //        sMailSubject = sMailSubject.Replace("$Status$",Status);
        //        sMailSubject = sMailSubject.Replace("$Creator$", Requester);

        //        return sMailSubject;
        //    }
        //    catch (Exception ex)
        //    {
        //        AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
        //        MessageBox.Show(mess);
        //    }
        //    return "";
        //}

        public void UpdateEform(long appid)
        {
            //try
            //{
            //    int processInstance = K2CoreLib.K2Utils.GetWorklistItem(hdfSN.Value).ProcessInstance.ID;
            //    int proid = processInstance;
            //    int iTypeID = K2CoreLib.K2Utils.GetTypeIDProcessFromEfrom("HR_LeaveRequest");
            //    string sLinkContent = ConfigurationManager.AppSettings.Get("History_LeaveRequest") + appid.ToString() + "&LeaveRecordID=" + hLeaveRecordID.Value + "&EmpID=" + ucEmpHeader.EmployeeId.ToString();
            //    string sLinkFlow = proid.ToString();
            //    string status = "1";//(0: In process, 1: Complete, 2: Rework, 3:Reject)
            //    K2CoreLib.K2Utils.Update2EForm(SessionManager.UserDomain, SessionManager.UserDomain, iTypeID, DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), sLinkContent, sLinkFlow, status, proid);
            //}
            //catch
            //{
            //}
        }

        /// <summary>
        /// sự kiện click nút danh sách
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnList_Click(object sender, EventArgs e)
        {
            this.Response.Redirect(_LIST_PAGE);
        }

        /// <summary>
        /// sự kiện click nút tạo đơn nghỉ mới
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnCreate_Click(object sender, EventArgs e)
        {
            this.Response.Redirect(_MY_PAGE);
        }


        /// <summary>
        /// xử lý ajax - chọn thông tin đến ngày -> hiển thị thông tin ca làm việc trong khoảng thời gian từ ngày - đến ngày xuống lưới
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void dtpToDate_OnDateSelected(object sender, Telerik.Web.UI.Calendar.SelectedDateChangedEventArgs e)
        {
            try
            {
                // ID nhân viên
                long lngEmpID = 0;
                long.TryParse(this.hEmpID.Value, out lngEmpID);

                //lấy thông tin danh sách ca làm việc trong khoảng thời gian
                TS_LeaveRecordCollection col = new TS_LeaveRecordCollection();
                DataTable dt = new DataTable();
                // ID phiếu nghỉ
                long lngLeaveID = 0;
                long.TryParse(hLeaveRecordID.Value.ToString(), out lngLeaveID);
                // ID loại nghỉ
                long lngWorkPointID = 0;
                long.TryParse(cboWorkPoint.SelectedValue, out lngWorkPointID);

                if (dtpToDate.SelectedDate == null && txtWorkPointTypeID.Text == "5") // đối với nhóm loại nghỉ sinh con
                    dtpToDate.SelectedDate = Convert.ToDateTime("01/01/2999");
                else if (dtpFromDate.SelectedDate == null || dtpToDate.SelectedDate == null) // 1 trong 2 thong tin = null thi ko lam j het
                    return;

                if (dtpFromDate.SelectedDate != null && dtpToDate.SelectedDate != null && Convert.ToDateTime(dtpFromDate.SelectedDate) <= Convert.ToDateTime(dtpToDate.SelectedDate))
                {
                    dt = col.SearchDetailScheduleEmp(lngEmpID, dtpFromDate.SelectedDate.Value, dtpToDate.SelectedDate.Value, lngLeaveID, hStatusEdit.Value.ToString(), lngWorkPointID);

                    // duyệt để tính số ngày làm việc theo lịch
                    float sumCoef = 0;
                    string WorkPointTypeCode = "";
                    DateTime date = new DateTime();
                    foreach (DataRow r in dt.Rows)
                    {
                        sumCoef += float.Parse(r["NumDay"].ToString());
                        WorkPointTypeCode = r["WorkPointTypeCode"].ToString();
                        date = Convert.ToDateTime(r["ToDate"]);
                    }
                    txtLeaveTaken.Text = sumCoef.ToString(); // duyệt xong thì gán vào số ngày nghỉ

                    // load thông tin đến ngày trong trường hợp nghỉ thai sản
                    if (WorkPointTypeCode == "0001") // nhóm loại nghỉ sinh con
                        dtpToDate.SelectedDate = date;

                    // load chi tiết phiếu nghỉ
                    LoadDetailGrid();

                    // khoảng thời gian ko có ca làm việc
                    if (dtgDetail.Items.Count <= 0)
                        MessageBox.ShowByMessCode("10160", MessageType.Warning);
                    else
                    {
                        float SoNgayNghiNhap = TS_clsCommon.ConvertFromStringToFloat(txtLeaveTaken.Text);
                        float SoNgayNghiDB = TS_clsCommon.ConvertFromStringToFloat(txtLeaveTemp.Text);
                        float PhepCoTT = TS_clsCommon.ConvertFromStringToFloat(txtYearsDayActual.Text);
                        if (txtWorkPointTypeID.Text != "5")
                        {   // đối với nhóm nghỉ sinh con (thai sản) thì ko cần kiểm tra
                            if (SoNgayNghiNhap > PhepCoTT + SoNgayNghiDB && txtYearsDayActual.Text != "")
                                pnlValidate.Visible = true;
                            else
                                pnlValidate.Visible = false;
                        }
                        else pnlValidate.Visible = false;
                    }
                }
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }

        /// <summary>
        /// xử lý ajax chọn loại nghỉ -> tính số ngày nghỉ còn lại và hiển thị phần lưu ý
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void cboWorkPoint_SelectedIndexChanged(object sender, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e)
        {
            try
            {
                // clear thông tin trước khi load lại
                txtRemainLeave.Text = string.Empty;

                // ID nhân viên
                long lngEmpID = 0;
                long.TryParse(this.hEmpID.Value, out lngEmpID);

                // ID loại nghỉ
                long lngWorkPointID = 0;
                long.TryParse(this.cboWorkPoint.SelectedValue, out lngWorkPointID);

                // lấy thông tin số ngày còn lại tương ứng của nhân viên và loại nghỉ
                TS_LeaveRecordCollection col = new TS_LeaveRecordCollection();
                DataTable dt = new DataTable();
                dt = col.FindWorkPointByID_NewRule(lngWorkPointID, lngEmpID);

                if (dt != null && dt.Rows.Count > 0)
                {
                    DataRow r = dt.Rows[0];

                    // load số ngày còn lại, comment
                    if (r["LSWorkPointTypeID"].ToString() != "5")
                    { // đối với nhóm loại nghỉ thai sản thì ko thể hiện số ngày còn lại                    
                        txtRemainLeave.Text = r["YearDays"].ToString(); // còn lại                    
                        txtYearsDay.Text = r["SoPhepCo"].ToString(); // số phép có      
                        txtLeaveDay.Text = r["DaNghi"].ToString(); // đã nghỉ
                        txtYearsDayActual.Text = r["SoPhepTT"].ToString(); // số ngày được nghỉ thực tế
                        txtLeaveTemp.Text = "0";
                    }
                    txtComment.Text = r["Note"].ToString();

                    if (Convert.ToBoolean(r["IsConfirm"].ToString())) // nếu là loại nghỉ có xác nhận thì hiển thị ghi chú
                        pnlComment.Visible = true;
                    else
                        pnlComment.Visible = false;

                    // lấy thông tin nhóm loại nghỉ tương ứng
                    txtWorkPointTypeID.Text = r["LSWorkPointTypeID"].ToString();

                    txtCLDays.Text = r["YearDays"].ToString();
                }

                // rem [19/09/2011]
                /*// lấy thông tin số ngày còn lại tương ứng của nhân viên và loại nghỉ
                TS_LeaveRecordCollection col = new TS_LeaveRecordCollection();
                LS_WorkPointBL bl = new LS_WorkPointBL();
                bl = col.FindWorkPointByID(lngWorkPointID, lngEmpID);

                // load số ngày còn lại, comment
                if (bl.LSWorkPointTypeID != 5) // đối với nhóm loại nghỉ thai sản thì ko thể hiện số ngày còn lại
                    txtRemainLeave.Text = bl.YearDays.ToString();
                txtComment.Text = bl.Note;

                if (bl.IsConfirm) // nếu là loại nghỉ có xác nhận thì hiển thị ghi chú
                    pnlComment.Visible = true;
                else
                    pnlComment.Visible = false;

                // lấy thông tin nhóm loại nghỉ tương ứng
                txtWorkPointTypeID.Text = bl.LSWorkPointTypeID.ToString();

                txtCLDays.Text = bl.YearDays.ToString();
                */
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }

        /// <summary>
        /// Write dữ liệu cho lưới chi tiết phiếu nghỉ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void dtgDetail_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
        {
            try
            {
                string IsHalfDay = "", IsHead = "", IsLast = "", IsAll = "";
                string IsHeadE = "", IsLastE = "", IsAllE = "";
                foreach (GridDataItem item in dtgDetail.Items)
                {
                    IsHalfDay = item["IsHalfDay"].Text.ToString();
                    IsHead = item["IsHead"].Text.ToString();
                    IsLast = item["IsLast"].Text.ToString();
                    IsAll = item["IsAll"].Text.ToString();
                    IsHeadE = item["IsHeadE"].Text.ToString();
                    IsLastE = item["IsLastE"].Text.ToString();
                    IsAllE = item["IsAllE"].Text.ToString();

                    CheckBox chkAll = (CheckBox)item.FindControl("chkAll");
                    CheckBox chkHead = (CheckBox)item.FindControl("chkHead");
                    CheckBox chkLast = (CheckBox)item.FindControl("chkLast");

                    //// xử lý visible trong trường hợp ca 1/2 ngày hoặc 1 ngày có 2 loại nghỉ (đã nhập nửa buổi trong hệ thống)
                    //if (IsHalfDay == "1") // ca 1/2 ngày
                    //{
                    //    chkAll.Enabled = false;
                    //    chkLast.Enabled = false;
                    //    chkHead.Enabled = true;
                    //}
                    //else // ca nguyên ngày
                    //{
                    //    chkAll.Enabled = true;
                    //    chkLast.Enabled = true;
                    //    chkHead.Enabled = true;
                    //}
                    //if (IsAllE == "1" || (IsHalfDay == "1" && IsHeadE == "1")) // ngày đã nhập nghỉ ở 1 phiếu nghỉ khác
                    //{
                    //    chkAll.Enabled = false;
                    //    chkLast.Enabled = false;
                    //    chkHead.Enabled = false;
                    //}
                    //else if (IsHeadE == "1")
                    //{
                    //    chkAll.Enabled = false;
                    //    chkLast.Enabled = true;
                    //    chkHead.Enabled = false;
                    //}
                    //else if (IsLastE == "1")
                    //{
                    //    chkAll.Enabled = false;
                    //    chkLast.Enabled = false;
                    //    chkHead.Enabled = true;
                    //}


                    // xử lý tự động check
                    if (IsHead == "1") chkHead.Checked = true;
                    if (IsLast == "1") chkLast.Checked = true;
                    if (IsAll == "1") chkAll.Checked = true;

                    //// nếu là nghỉ thai sản thì ko cho hiệu chỉnh thông tin chi tiết phiếu nghỉ
                    //if (txtWorkPointTypeID.Text == "5") // nhóm nghỉ sinh con
                    //{
                    //    chkAll.Enabled = false;
                    //    chkLast.Enabled = false;
                    //    chkHead.Enabled = false;
                    //}
                }
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }

        /// <summary>
        /// edit thông tin phiếu nghỉ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void dtgList_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
        {
            try
            {
                if (e.CommandName == "EditLeave")
                {
                    long lngLeaveRecordID = 0;
                    GridDataItem item = (GridDataItem)e.Item;
                    long.TryParse(item["LeaveRecordID"].Text, out lngLeaveRecordID);
                    hStatusEdit.Value = "1";
                    LoadInfoLeaveRecord(lngLeaveRecordID);
                }
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }

        /// <summary>
        /// Sự kiện bind dữ liệu khi load Form cho dtgList
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void dtgList_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
        {
            try
            {
                String isdeleted = "";
                if (e.Item is GridDataItem)
                {
                    GridDataItem item = (GridDataItem)e.Item;

                    isdeleted = item["IsDeleted"].Text.ToString();
                    CheckBox check = (item["ClientSelectColumn"].Controls[0] as CheckBox);

                    // được xóa những dòng chưa có hiệu lực
                    if (isdeleted == "1")
                    {
                        check.Visible = true;
                    }
                    else
                    {
                        check.Visible = false;
                    }
                }
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }


        /// <summary>
        /// Load thông tin chi tiết phiếu nghỉ
        /// </summary>
        /// <param name="LeaveRecordID"></param>
        protected void LoadInfoLeaveRecord(long LeaveRecordID)
        {
            try
            {
                TS_LeaveRecordBL bl = new TS_LeaveRecordBL();
                TS_LeaveRecordCollection col = new TS_LeaveRecordCollection();

                // lay thong tin chi tiet phieu nghi theo ID
                bl = col.FindLeaveRecordByID(LeaveRecordID);

                // thông tin loại nghỉ theo nhân viên
                long lngEmpID = 0;
                long.TryParse(hEmpID.Value, out lngEmpID);
                LS_WorkPointCollection col1 = new LS_WorkPointCollection();
                DataTable dtWorkPoint = new DataTable();
                dtWorkPoint = col1.GetComboWorkPointByEmpIDCheck(lngEmpID);

                if (bl.DTO != null)
                {
                    this.chkDetail.Checked = true;

                    for (int i = 0; i < dtWorkPoint.Rows.Count; i++)
                        if (dtWorkPoint.Rows[i]["Id"].ToString() == bl.LSWorkPointID.ToString())
                            this.cboWorkPoint.SelectedValue = bl.LSWorkPointID.ToString();

                    this.dtpFromDate.SelectedDate = bl.FromDate;
                    this.dtpToDate.SelectedDate = bl.ToDate;
                    this.txtLeaveTaken.Text = bl.LeaveTaken;
                    this.txtReason.Text = bl.Note;
                    this.txtComment.Text = bl.Comment;
                    this.hEmpID.Value = bl.EmpID.ToString();
                    this.hLeaveRecordID.Value = bl.LeaveRecordID.ToString();
                    this.hApplicationLeaveID.Value = bl.ApplicationLeaveID.ToString();
                    txtNoteUpdate.Text = bl.NoteUpdate;


                    DataTable dt = col.GetUnUsedDays(bl.EmpID, bl.FromDate, bl.ToDate, bl.LSWorkPointID, LeaveRecordID);
                    DataRow r = dt.Rows[0];
                    txtRemainLeave.Text = r["UnUsedDays"].ToString();
                    txtWorkPointTypeID.Text = r["WorkPointTypeID"].ToString();
                    txtYearsDay.Text = r["PhepCo"].ToString(); // số ngày có
                    txtYearsDayActual.Text = r["PhepCoTT"].ToString(); // số ngày có thực tế
                    txtLeaveDay.Text = r["DaNghi"].ToString(); // số ngày đã nghỉ
                    txtLeaveTemp.Text = txtLeaveTaken.Text;

                    if (r["IsConfirm"].ToString() == "1")
                        pnlComment.Visible = true;
                    else
                        pnlComment.Visible = false;

                    // nếu account = admin chấm công thì ko được quyền update phiếu nghỉ trong trường hợp đã duyệt bcc
                    if (r["IsUpdate"].ToString() == "1")
                    {
                        btnSaveTop.Enabled = true;
                        btnSaveBot.Enabled = true;
                    }
                    else
                    {
                        btnSaveTop.Enabled = false;
                        btnSaveBot.Enabled = false;
                    }
                }
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }

        /// <summary>
        /// load thông tin chi tiết phiếu nghỉ
        /// </summary>
        protected void LoadDetailGrid()
        {
            this.dataDetail.SelectParameters["FromDate"].DefaultValue = dtpFromDate.SelectedDate.ToString();
            this.dataDetail.SelectParameters["ToDate"].DefaultValue = dtpToDate.SelectedDate.ToString();
            this.dataDetail.SelectParameters["EmpID"].DefaultValue = hEmpID.Value;
            this.dataDetail.SelectParameters["LeaveRecordID"].DefaultValue = hLeaveRecordID.Value;
            this.dataDetail.SelectParameters["StatusEdit"].DefaultValue = hStatusEdit.Value;

            this.dtgDetail.DataSourceID = dataDetail.ID;
            this.dtgDetail.DataBind();
        }

        /// <summary>
        /// load thông tin danh sách phiếu nghỉ
        /// </summary>
        protected void LoadLeaveListGrid()
        {
            this.dataList.SelectParameters["ApplicationID"].DefaultValue = hApplicationLeaveID.Value;

            this.dtgList.DataSourceID = dataList.ID;
            this.dtgList.DataBind();
        }

        /// <summary>
        /// set trạng thái các button tương ứng với trạng thái của đơn nghỉ
        /// </summary>
        /// <param name="flag"></param>
        protected void setEnabledButton(Boolean flag)
        {
            btnSaveTop.Enabled = flag;
            btnSaveBot.Enabled = flag;
        }
    }
}